<?php
/**
 * This is the template for generating a controller class file for CRUD feature.
 * The following variables are available in this template:
 * - $this: the CrudCode object
 */
?>
<?php echo "<?php\n"; ?>
/**
* Controller class.
* @propery string $modelClass name of the model class
*/
class <?php echo $this->controllerClass; ?> extends <?php echo $this->baseControllerClass . "\n"; ?>
{

/**
* @var string name of the parameter that contains model class
*/
public $modelClassParam = 'modelClass';
/**
* @var string class name of the module's model
*/
protected $_modelClass = '<?php echo $this->modelClass; ?>';

/**
* Initializes admin module.
*/
public function init()
{
Yii::app()->getModule('admin');

$this->_modelClass = $this->getParam($this->modelClassParam, $this->_modelClass);

parent::init();
}

/**
* @return string class name of the module's model
*/
public function getModelClass()
{
return $this->_modelClass;
}

/**
* @param string $value new model class name
*/
public function setModelClass($value)
{
$this->_modelClass = $value;
}


/**
* Displays a particular model.
* @param integer $id the ID of the model to be displayed
*/
public function actionView($id)
{
$this->render('view', array(
'model' => $this->loadModel($id),
));
}

/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
$modelClass = $this->getModelClass();
$model = new $modelClass;

if (isset($_POST[$this->getModelClass()])) {

$model->attributes = $_POST[$this->getModelClass()];

if ($this->module->enableAjaxValidation && !empty($_POST['ajax'])) {
$this->performAjaxValidation($model);
}

if ($model->save()) {
$this->redirect(array('view', 'id' => $model->id));
}
}

$this->render('create', array(
'model' => $model,
'enableAjaxValidation'=>$this->module->enableAjaxValidation
));
}

/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
$model = $this->loadModel($id);

if (isset($_POST[$this->getModelClass()])) {

$model->attributes = $_POST[$this->getModelClass()];

if ($this->module->enableAjaxValidation && !empty($_POST['ajax'])) {
$this->performAjaxValidation($model);
}

if ($model->save()) {
$this->redirect(array('view', 'id' => $model->id));
}
}

$this->render('update', array(
'model' => $model,
'enableAjaxValidation'=>$this->module->enableAjaxValidation
));
}

/**
* Deletes a particular model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id the ID of the model to be deleted
*/
public function actionDelete($id)
{
if (Yii::app()->request->isPostRequest) {
// we only allow deletion via POST request
$this->loadModel($id)->delete();

// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if (!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
else
throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}

/**
* Lists all models.
*/
public function actionIndex()
{
$dataProvider = new CActiveDataProvider($this->getModelClass());
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}

/**
* Manages all models.
*/
public function actionAdmin()
{
$model = $this->getModelClass();
$model = new $model('search');
$model->unsetAttributes();  // clear any default values
if (isset($_GET[$this->getModelClass()]))
$model->attributes = $_GET[$this->getModelClass()];

$this->render('admin', array(
'model' => $model,
));
}

/**
* Returns the data model based on the primary key given in the GET variable.
* If the data model is not found, an HTTP exception will be raised.
* @param integer the ID of the model to be loaded
* @return CActiveRecord model object
*/
public function loadModel($id)
{
$model = CActiveRecord::model($this->getModelClass())->findByPk($id);
if ($model === null) {
throw new CHttpException(404, 'The requested page does not exist.');
}
return $model;
}

/**
* Performs the AJAX validation.
* @param CModel the model to be validated
*/
protected function performAjaxValidation($model)
{
if (isset($_POST['ajax']) && $_POST['ajax'] === $this->getModelClass().'-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}

}
